﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BUS;
using DTO;

namespace GUI
{
    public partial class frmDonNhapHang : Form
    {
        public frmDonNhapHang()
        {
            InitializeComponent();
        }

        private void frmDonNhapHang_Load(object sender, EventArgs e)
        {
            MatHangBUS mhbus = new MatHangBUS();
            List<MatHangDTO> ds1 = new List<MatHangDTO>();
            ds1 = mhbus.KLayDanhSachTenMatHang();

            cbbTenMH.DataSource = ds1;
            cbbTenMH.DisplayMember = "TenMatHang";
            cbbTenMH.ValueMember = "MaMatHang";

            DonViTinhBUS dvtbus = new DonViTinhBUS();
            List<DonViTinhDTO> ds3 = new List<DonViTinhDTO>();
            ds3 = dvtbus.KLayDSDVT();

            cbbDonViTinh.DataSource = ds3;
            cbbDonViTinh.DisplayMember = "TenDonViTinh";
            cbbDonViTinh.ValueMember = "MaDonViTinh";

            NhaCungCapBUS nccbus = new NhaCungCapBUS();
            List<NhaCungCapDTO> ds4 = new List<NhaCungCapDTO>();
            ds4 = nccbus.KLayDSNCC();

            cbbTenNCC.DataSource = ds4;
            cbbTenNCC.DisplayMember = "TenNhaCungCap";
            cbbTenNCC.ValueMember = "MaNhaCungCap";

            txtMaMH.Text = cbbTenMH.SelectedValue.ToString();
            MatHangBUS mhBUS = new MatHangBUS();
            cbbXuatXu.DataSource = mhBUS.KLayXuatXuTheoMatHang(int.Parse(cbbTenMH.SelectedValue.ToString()));
            cbbXuatXu.ValueMember = "MaXuatXu";
            cbbXuatXu.DisplayMember = "TenXuatXu";
            ThietLap();
        }

        private void LayGiaTheoMatHang(int maMH, int maXX)
        {
            MatHangBUS mhBUS = new MatHangBUS();
            txtDonGia.Text = mhBUS.KLayGiaTheoMatHang(maMH, maXX).ToString();
        }

        private void LayDanhSachXuatXuTheoMatHang(int maMH)
        {
            MatHangBUS mhBUS = new MatHangBUS();
            cbbXuatXu.DataSource = mhBUS.KLayXuatXuTheoMatHang(maMH);
            cbbXuatXu.ValueMember = "MaXuatXu";
            cbbXuatXu.DisplayMember = "TenXuatXu";
        }
        int i = 0;

        private void ThietLap()
        {
            cbbTenNCC.SelectedIndex = 0;
            cbbTenMH.SelectedIndex = 0;
            cbbXuatXu.SelectedIndex = 0;
            cbbDonViTinh.SelectedIndex = 0;
            txtSoLuong.Text = "1";
            
        }
        private double TinhTongTien()
        {
            double tongtien = 0;
            int count = dgvDanhSachMH.Rows.Count;
            if (count == 0)
                return tongtien;
            else
            {
                for (int dong = 0; dong < count; dong++)
                {
                    double thanhtien = double.Parse(dgvDanhSachMH.Rows[dong].Cells[7].Value.ToString());
                    tongtien += thanhtien;
                }
            }
            return tongtien;
        }

        private void TinhTien()
        {
            if (dgvDanhSachMH.Rows.Count == 0)
                MessageBox.Show("Chưa nhập mặt hàng. Bạn có muốn cập nhật lại .!", "Thông báo ", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
            string tratruoc = txtThanhToan.Text;
            double tongtien = TinhTongTien();
            txtTongTien.Text = tongtien.ToString();
            if (tratruoc != null)
            {
                double tt;
                if (tratruoc == "")
                {
                    tt = 0;
                }
                else
                {
                    tt = double.Parse(tratruoc);
                }
                txtConNo.Text = (tongtien - tt).ToString();

                if (tt > tongtien)
                {
                    MessageBox.Show("Số tiền trả trước đã vượt quá tổng tiền. Bạn có muốn cập nhật lại .!", "Thông báo ", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                }
                if (tt < 0)
                    MessageBox.Show("Số tiền trả trước phải lớn hơn 0. Bạn có muốn cập nhật lại .!", "Thông báo ", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);

            }
        }
        private void ThemMatHangXuongDGV()  //Hàm thêm 1 mặt hàng xuống datagirdview
        {

            if (txtSoLuong.Text == "0" || txtDonGia.Text == "0" || (txtDonGia.Text == "0" && txtSoLuong.Text == "0"))
                //MessageBox.Show("Chưa nhập số lượng hoặc đơn giá. Bạn có muốn cập nhật lại .!", "Thông báo ", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                MessageBox.Show("Chưa nhập số lượng hoặc đơn giá. Bạn có muốn cập nhật lại .!", "Thông báo ");
            else
            {
                int stt = dgvDanhSachMH.Rows.Count + 1;

                string tenmh = cbbTenMH.Text;
                string tenxx = cbbXuatXu.Text;
                string dvtinh = cbbDonViTinh.Text;
                int mamh = int.Parse(txtMaMH.Text);
                int soluong = int.Parse(txtSoLuong.Text);
                double dongia = double.Parse(txtDonGia.Text);
                double thanhtien = soluong * dongia;
                dgvDanhSachMH.Rows.Add(stt, mamh, tenmh, tenxx, dvtinh, soluong, dongia, thanhtien);
            }
            TinhTien();
        }

        private int KiemTraMatHangDaCoTrongDGV(int maMH, int maXX)   //hàm kiểm tra xem mặt hàng đã tồn tại trong datagirdview chưa
        {                                          // trả về 0 nếu chưa tồn tại, nếu tồn tại trả về index
            int count = dgvDanhSachMH.Rows.Count;
            int index = -1;
            if (count == 0)
                return index;
            else
            {
                MatHangBUS mhBUS = new MatHangBUS();
                XuatXuBUS xxBUS = new XuatXuBUS();
                string tenMH = mhBUS.KLayTenMatHangTheoMa(maMH);
                string tenXX = xxBUS.KLayTenXuatXuTheoMa(maXX);
                for (int dong = 0; dong < count; dong++)
                {
                    string _tenmh = dgvDanhSachMH.Rows[dong].Cells[2].Value.ToString();
                    string _tenxx = dgvDanhSachMH.Rows[dong].Cells[3].Value.ToString();
                    if (tenMH == _tenmh && tenXX == _tenxx)
                    {
                        index = dong;
                        break;
                    }
                }
            }
            return index; ;
        }
        private DateTime Ngay(DateTimePicker dtpngay)
        {
            DateTime ngay = new DateTime(dtpngay.Value.Year, dtpngay.Value.Month, dtpngay.Value.Day);
            return ngay;
        }

        private void btnThemMH_Click(object sender, EventArgs e)
        {
            int maMH = int.Parse(txtMaMH.Text.ToString());
            int maXX = int.Parse(cbbXuatXu.SelectedValue.ToString());
            int index = KiemTraMatHangDaCoTrongDGV(maMH, maXX);
            if (index == -1)
            {
                ThemMatHangXuongDGV();
            }
            else
            {

                DialogResult result = MessageBox.Show("Mặt hàng này đã được thêm. Bạn có muốn cập nhật lại .!", "Thông báo ", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                if (result == DialogResult.OK)
                {
                    if (txtSoLuong.Text == "0" || txtDonGia.Text == "0" || (txtSoLuong.Text == "0" && txtDonGia.Text == "0"))
                    {
                        MessageBox.Show("Chưa nhập số lượng hoặc đơn giá. Bạn có muốn cập nhật lại .!", "Thông báo ", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                        
                    }
                    else
                    {
                        txtTongTien.Text = "0";
                        txtThanhToan.Text = "0";
                        txtConNo.Clear();
                        txtConNo.Text = "0";

                        dgvDanhSachMH.Rows[index].Cells[5].Value = txtSoLuong.Text;
                        dgvDanhSachMH.Rows[index].Cells[6].Value = txtDonGia.Text;
                        dgvDanhSachMH.Rows[index].Cells[7].Value = int.Parse(txtSoLuong.Text) * double.Parse(txtDonGia.Text);
                        dgvDanhSachMH.Refresh();
                        txtTongTien.Text = (int.Parse(txtSoLuong.Text) * double.Parse(txtDonGia.Text)).ToString();
                        txtConNo.Text = (double.Parse(txtTongTien.Text) - double.Parse(txtThanhToan.Text)).ToString();
                    }
                }
            }
            ThietLap();
        }

        private void btnXoaMH_Click(object sender, EventArgs e)
        {
            int dong = dgvDanhSachMH.SelectedCells.Count;
            if (dong == 0)
                return;
            dong = dgvDanhSachMH.SelectedCells[0].RowIndex;
            dgvDanhSachMH.Rows.RemoveAt(dong);
        }

        private void btnLamMoi_Click(object sender, EventArgs e)
        {
            cbbTenNCC.Visible = true;
            cbbTenNCC.SelectedIndex = 0;
            cbbTenMH.SelectedIndex = 0;
            cbbXuatXu.SelectedIndex = 0;
            cbbDonViTinh.SelectedIndex = 0;

            txtMaMH.Text = cbbTenMH.SelectedValue.ToString();           
            txtSoLuong.Clear();
            txtTongTien.Clear();
            txtConNo.Clear();

            dgvDanhSachMH.Rows.Clear();
        }

        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            
            PhieuNhapHangBUS pnhBUS = new PhieuNhapHangBUS();
            PhieuNhapHangDTO pnhDTO = new PhieuNhapHangDTO();
            ChiTietPhieuNhapHangBUS ctpnhBUS = new ChiTietPhieuNhapHangBUS();

            MatHangBUS mhBUS = new MatHangBUS();
            XuatXuBUS xxBUS = new XuatXuBUS();
            DonViTinhBUS dvBUS = new DonViTinhBUS();

            if (txtThanhToan.Text.Trim() == "")
                txtThanhToan.Text = "0";

            int maPNH = pnhBUS.LayMaPhieuNhapHang() + 1;
            pnhDTO.MaPhieuNhap = maPNH;
            pnhDTO.NgayNhap = Ngay(dtNgayNhap);
            pnhDTO.MaNhaCungCap = int.Parse(cbbTenNCC.SelectedValue.ToString());
            pnhDTO.TongTien = double.Parse(txtTongTien.Text);
            pnhDTO.ThanhToan = double.Parse(txtThanhToan.Text);
            pnhDTO.ConNo = double.Parse(txtConNo.Text);

            List<ChiTietPhieuNhapHangDTO> listPNH = new List<ChiTietPhieuNhapHangDTO>();
            int somathang = dgvDanhSachMH.Rows.Count;

            if (somathang >= 1)
            {
                int dong = 0;
                int maCTPNH = ctpnhBUS.LayMaChiTietPNH() + 1;
                while (dong < somathang)
                {
                    // thêm từng dòng trên datagirdview, mỗi dòng tương ứng với 1 mặt hàng
                    ChiTietPhieuNhapHangDTO ctpnhDTO = new ChiTietPhieuNhapHangDTO();
                    ctpnhDTO.MaCTPhieuNhap = maCTPNH + dong;
                    ctpnhDTO.MaPhieuNhap = maPNH;
                    string tenMH = dgvDanhSachMH.Rows[dong].Cells[2].Value.ToString();
                    ctpnhDTO.MaMatHang = mhBUS.KLayMaMatHangTheoTen(tenMH);
                    string tenXX = dgvDanhSachMH.Rows[dong].Cells[3].Value.ToString();
                    ctpnhDTO.MaXuatXu = xxBUS.KLayMaXuatXuTheoTen(tenXX);
                    string tenDV = dgvDanhSachMH.Rows[dong].Cells[4].Value.ToString();
                    ctpnhDTO.MaDonViTinh = dvBUS.KLayMaDonViTinh(tenDV);
                    ctpnhDTO.SoLuong = int.Parse(dgvDanhSachMH.Rows[dong].Cells[5].Value.ToString());
                    ctpnhDTO.GiaNhap = int.Parse(dgvDanhSachMH.Rows[dong].Cells[6].Value.ToString());

                    listPNH.Add(ctpnhDTO);
                    dong++;
                }

            }
            // bắt đầu ghi xuống cơ sở dữ liệu

            string messHD = pnhBUS.ThemPhieuNhapHang(pnhDTO);
            if (messHD == "")
            {

                string messCT = "";
                bool errCT = false;
                for (int m = 0; (m < listPNH.Count) && (errCT == false); m++)
                {
                    messCT = ctpnhBUS.ThemCTPhieuNhapHang(listPNH[m]);

                }
                if (messCT == "")
                {
                    //bảng MATHANG
                    bool errMH = true;
                    string messMH = "";
                    for (int k = 0; (k < listPNH.Count) && (errMH == true); k++)
                    {
                        // cập nhật lại số lượng mặt hàng
                        messMH = mhBUS.KCapNhatSoLuong(listPNH[k].MaMatHang, listPNH[k].MaXuatXu, listPNH[k].SoLuong, errMH);
                        messMH = mhBUS.KCapNhatGiaNhap(listPNH[k].MaMatHang, listPNH[k].MaXuatXu, listPNH[k].GiaNhap, errMH);

                    }

                }
            }
            MessageBox.Show("Lưu dữ liệu thành công .!");
            ThietLap();

            txtThanhToan.Text = "0";
            txtConNo.Text = "0";
            txtTongTien.Text = "0";
            dgvDanhSachMH.Rows.Clear();
        }

        private void txtSoLuong_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || (char.IsControl(e.KeyChar)))
            { }
            else
            {
                e.Handled = true;
            }
        }

        private void txtDonGia_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || (char.IsControl(e.KeyChar)))
            { }
            else
            {
                e.Handled = true;
            }
        }

        private void txtThanhToan_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || (char.IsControl(e.KeyChar)))
            { }
            else
            {
                e.Handled = true;
            }
        }

        private void txtSoLuong_MouseClick(object sender, MouseEventArgs e)
        {
            txtSoLuong.Clear();
        }

        private void txtDonGia_MouseClick(object sender, MouseEventArgs e)
        {
            txtDonGia.Clear();
        }

        private void txtThanhToan_MouseClick(object sender, MouseEventArgs e)
        {
            txtThanhToan.Clear();
        }

        private void txtThanhToan_TextChanged(object sender, EventArgs e)
        {
            string tratruoc = txtThanhToan.Text;
            double tongtien = TinhTongTien();
            txtTongTien.Text = tongtien.ToString();
            if (tratruoc != null)
            {
                double tt;
                tt = double.Parse(tratruoc);
                if (tt > tongtien)
                {
                    MessageBox.Show("Số tiền trả trước đã vượt quá tổng tiền. Bạn có muốn cập nhật lại .!", "Thông báo ", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    txtThanhToan.Text = "0";
                }
                if (tt < 0)
                {
                    MessageBox.Show("Số tiền trả trước phải lớn hơn 0. Bạn có muốn cập nhật lại .!", "Thông báo ", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    txtThanhToan.Text = "0";
                }
            }
            txtConNo.Text = ((double.Parse(txtTongTien.Text) - double.Parse(txtThanhToan.Text)).ToString());
        }

        private void cbbTenMH_SelectedIndexChanged(object sender, EventArgs e)
        {
            i++;
            if (i <= 2)
                return;
            txtMaMH.Text = cbbTenMH.SelectedValue.ToString();
            int maMH = Convert.ToInt32(cbbTenMH.SelectedValue.ToString());
            LayDanhSachXuatXuTheoMatHang(maMH);
        }

        private void btnDSPhieuNhap_Click(object sender, EventArgs e)
        {
            frmXemDSPhieuNhap frm = new frmXemDSPhieuNhap();
            frm.ShowDialog();
        }

        private void btnexit_Click(object sender, EventArgs e)
        {
            //DialogResult dlr = MessageBox.Show("Bạn muốn thoát khỏi chương trình?", "Warnning", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            //if (dlr == DialogResult.Yes)
            //    this.Close();
            Close();
        }

        int j = 0;
        private void cbbXuatXu_SelectedIndexChanged(object sender, EventArgs e)
        {
            j++;
            if (j <= 2)
                return;
            int maMH = Convert.ToInt32(txtMaMH.Text.ToString());
            int maXX = Convert.ToInt32(cbbXuatXu.SelectedValue.ToString());
            LayGiaTheoMatHang(maMH, maXX);
        }     
    }
}
